// const http = require('http')
// const path = require('path')
// const fs = require('fs')
// const mime = require('mime')

// const server = http.createServer((req, res) => {
//     let filePath = path.resolve(__dirname, path.join('www', req.url));

//     if (fs.existsSync(filePath)) {
//         let stat = fs.statSync(filePath)

//         if (stat.isDirectory()) {
//             filePath = path.join(filePath, 'index.html')
//         }

//         if (fs.existsSync(filePath)) {
//             let { ext } = path.parse(filePath)
//             stat = fs.statSync(filePath)

//             // 获取客户端的条件请求头
//             const ifModifiedSince = req.headers['if-modified-since']
//             const ifNoneMatch = req.headers['if-none-match']

//             // 生成 ETag（基于文件大小和修改时间）
//             const etag = `"${stat.size}-${stat.mtimeMs}"`

//             // 将文件修改时间转换为标准的 HTTP 日期格式
//             const lastModified = new Date(stat.mtime).toUTCString()

//             let status = 200

//             // 检查是否应该返回 304（未修改）
//             const modifiedSinceTime = ifModifiedSince ? new Date(ifModifiedSince).getTime() : 0
//             const fileModifiedTime = Math.floor(stat.mtimeMs)

//             if ((ifNoneMatch && ifNoneMatch === etag) ||
//                 (ifModifiedSince && modifiedSinceTime >= fileModifiedTime)) {
//                 status = 304
//             }

//             // 根据文件类型设置不同的缓存策略
//             let cacheControl = 'max-age=86400' // 默认1天

//             if (ext === '.html') {
//                 // HTML文件使用较短的缓存时间或不缓存
//                 cacheControl = 'no-cache'
//             } else if (['.jpg', '.jpeg', '.png', '.gif', '.ico', '.svg'].includes(ext)) {
//                 // 图片文件：对于经常更新的图片，可以使用较短的缓存时间
//                 cacheControl = 'max-age=3600' // 1小时
//                 // 或者完全禁用缓存（推荐用于经常更新的图片）
//                 // cacheControl = 'no-cache, no-store, must-revalidate'
//             } else if (['.css', '.js'].includes(ext)) {
//                 // CSS/JS文件
//                 cacheControl = 'max-age=3600'
//             }

//             // 设置响应头
//             const headers = {
//                 'Content-Type': mime.getType(ext),
//                 'Cache-Control': cacheControl,
//                 'ETag': etag,
//                 'Last-Modified': lastModified,
//                 // 添加这个头部可以防止某些代理服务器缓存
//                 'Vary': 'Accept-Encoding'
//             }

//             // 对于图片文件，可以添加额外的防缓存措施
//             if (['.jpg', '.jpeg', '.png', '.gif'].includes(ext)) {
//                 headers['Pragma'] = 'no-cache'
//                 headers['Expires'] = '0'
//             }

//             res.writeHead(status, headers)

//             if (status === 200) {
//                 fs.createReadStream(filePath).pipe(res)
//             } else {
//                 res.end()
//             }
//         } else {
//             // 文件不存在
//             res.writeHead(404, { 'Content-Type': 'text/plain' })
//             res.end('File not found')
//         }
//     } else {
//         // 路径不存在
//         res.writeHead(404, { 'Content-Type': 'text/plain' })
//         res.end('Path not found')
//     }
// })

// server.listen(8080, () => {
//     console.log('Server is running at http://127.0.0.1:8080')
// })
const http = require('http')
const path = require('path')
const fs = require('fs')
const mime = require('mime')

const server = http.createServer((req, res) => {
    let filePath = path.resolve(__dirname, path.join('www', req.url));
    if (fs.existsSync(filePath)) {
        let stat = fs.statSync(filePath)
        if (stat.isDirectory()) {
            filePath = path.join(filePath, 'index.html')
        }
        if (fs.existsSync(filePath)) {
            let { ext } = path.parse(filePath)
            const timeStamp = req.headers['if-modified-since']
            let status = 200;
            let stat = fs.statSync(filePath)

            if (timeStamp && Number(timeStamp) === stat.mtimeMs) {
                // 304:该资源没有被修改，可以走缓存
                status = 304;
            }
            res.writeHead(status, {
                'Content-Type': mime.getType(ext),
                'cache-control': 'max-age=86400',
                // 'ETag': `"${stat.size}-${stat.mtimeMs}"`,
                'Last-Modified': stat.mtimeMs
                // 'Content-Encoding': 'deflate',

            })
            if (status === 200) {
                fs.createReadStream(filePath).pipe(res)
            } else {
                res.end()
            }
        }

    }
})

server.listen(8080, () => {
    console.log('server is running at http://127.0.0.1:8080')
})

